//package com.ggb.reactive.security
//
//import org.springframework.security.core.Authentication
//import org.springframework.security.web.server.authentication.ServerAuthenticationConverter
//import org.springframework.stereotype.Component
//import org.springframework.web.server.ServerWebExchange
//import reactor.core.publisher.Mono
//import org.springframework.http.HttpHeaders;
//import org.springframework.security.authentication.BadCredentialsException
//import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
//import org.springframework.security.core.context.SecurityContextHolder
//
//@Component
//class JwtServerAuthenticationConverter:ServerAuthenticationConverter {
//   private val TOKEN_PREFIX:String = "Bearer ";
//    override fun convert(exchange: ServerWebExchange?): Mono<Authentication> {
//       println("访问 ServerAuthenticationConverter  。。。。。。。。。。。")
//        if(exchange?.request?.path?.value()?.contains("/admin/employee/login") == true){
//            return Mono.empty();
//        }
//        //return Mono.justOrEmpty(exchange)
//        //    .flatMap { it ->
//        //        val auth = it.request.headers.get(HttpHeaders.AUTHORIZATION)
//        //        if (auth == null){
//        //            return Mono.error<String>(BadCredentialsException("没有authorization信息"))
//        //        }
//        //        return Mono.just(auth);
//        //    }
//        //    .filter{
//        //        it.startsWith(TOKEN_PREFIX)
//        //    }
//        //    .log()
//        //    .map{it.get(0)}
//        //    .filter{
//        //        if(it.startsWith(TOKEN_PREFIX)){
//        //            return true
//        //        } else{
//        //            throw  BadCredentialsException("token没有以" + TOKEN_PREFIX + "开头");
//        //        }
//        //    }
//        //    .map{it.replace(TOKEN_PREFIX,"")}
//        //    .map{
//        //
//        //       val auth:Authentication = UsernamePasswordAuthenticationToken(it,it)
//        //        SecurityContextHolder.getContext().authentication = auth
//        //        auth
//        //    }
//        return Mono.justOrEmpty(exchange)
//            .flatMap {
//                val auth = it.request.headers[HttpHeaders.AUTHORIZATION]
//                if (auth == null) {
//                    return@flatMap Mono.error<Authentication>(BadCredentialsException("没有authorization信息"))
//                }
//                return@flatMap Mono.just(auth)
//            }
//            .filter {
//                if (it.isNotEmpty()) return@filter true
//                else {
//                    throw BadCredentialsException("没有token")
//                }
//            }
//            .log()
//            .map { it[0] }
//            .filter {
//                if (it.startsWith(TOKEN_PREFIX)) return@filter true
//                else {
//                    throw BadCredentialsException("token没有以$TOKEN_PREFIX 开头")
//                }
//            }
//            .map { it.replace(TOKEN_PREFIX, "") }
//            .map {
//                val auth = UsernamePasswordAuthenticationToken(it, it)
//                SecurityContextHolder.getContext().authentication = auth
//                return@map auth
//            }
//
//
//    }
//}